package cn.blnp.net.flowable.event.bound.message;

import lombok.extern.slf4j.Slf4j;
import org.flowable.engine.RepositoryService;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;

/**
 * <h3>边界事件-消息边界事件</h3>
 *
 * @author <a href="mailto:blnp.yibin@qq.com">lyb</a>
 * @version 1.0
 * @since 2025/5/8 17:38
 */
@Slf4j
@SpringBootTest
public class BoundMessageEvent {

    @Resource
    private RepositoryService repositoryService;
    @Resource
    private RuntimeService runtimeService;
    @Resource
    private TaskService taskService;

    /**
     *  <p>
     *      消息边界事件会捕获与其消息事件定义引用的消息具有相同消息名称的消息。当流程流转到消息边界事件依附的流程活动（如用户任务、子流程）时，工作流引擎会创建一个捕获事件，
     *  在其依附的流程活动的生命周期内等待一个抛出消息。在Flowable中，消息只能通过调用运行时服务的messageEventReceived()方法抛出。消息边界事件被触发后流程会沿其外出顺序流
     *  继续流转。如果该边界事件设置为中断，依附的流程活动将被终止。
     *  </p>
     *  <p>
     *      两个用户任务边界上分别依附着一个消息边界事件。其中，左侧消息边界事件的圆环是实线，表示它是边界中断事件；右侧消息边界事件的圆环是虚线，表示它是边界非中断事件。<br/><br/>
     *      <img src="https://free4.yunpng.top/2025/05/08/681c7d1b0155f.png" />
     *  </p>
     *  <p>
     *      事件定义格式详见下文示例：
     *      <pre>
     *          {@code
     *              <!-- 定义消息 -->
     *              <message id="theMessage" name="newInvoiceMessage"/>
     *              <process id="messageBoundaryEventProcess">
     *                  <!-- 定义用户任务节点 -->
     *                  <userTask id="theUserTask" name="审批"/>
     *                  <!-- 定义边界事件 -->
     *                  <boundaryEvent id="messageBoundaryEvent" name="消息边界事件" attachedToRef="theUserTask" cancelActivity="false">
     *                      <!-- 包含 messageEventDefinition子元素，代表消息边界事件 -->
     *                      <messageEventDefinition messageRef="theMessage" />
     *                  </boundaryEvent>
     *              </process>
     *          }
     *      </pre>
     *  </p>
     **/
    @Test
    public void test() {
        
    }
}
